容器與虛擬機——這兩種虛擬化解決方案有什么區別?一方面,您擁有容器化,它可以虛擬化操作系統 (OS),并允許多個工作負載在其上運行。另一方面,您擁有基于虛擬機的虛擬化,可以虛擬化硬件并允許多個操作系統實例在其上運行。這篇文章首先定義虛擬機和容器,然后討論它們最顯著的區別,然后討論它們如何在一個環境中協同工作,包括一個使用Parallels ? Remote Application Server (RAS)管理的環境。
什么是虛擬機?
想象虛擬機是什么的最簡單方法可能是想象計算機運行在純軟件的計算機之上。相比之下,運行這些“基于軟件的計算機”的計算機只是一臺普通計算機,即由硬件和軟件組成的計算機。例如,它具有物理 CPU、內存和存儲(本文將其稱為資源),而那些“基于軟件的計算機”則沒有。
在虛擬化術語中,那些“基于軟件的計算機”被稱為虛擬機或 VM。VM 具有從底層物理資源分配給它們的虛擬化資源。創建 VM 時,會為該 VM 保留一部分物理資源。此外,這些虛擬機中的每一個都有一個操作系統和一個或多個應用程序。
使一個或多個 VM 在物理計算機上運行并與 VM 共享物理資源的軟件稱為管理程序。一些管理程序運行在主機操作系統之上,而其他管理程序運行在裸機(無主機操作系統)上,即它們直接安裝在物理服務器上。
作為軟件,每個虛擬機都封裝在一個文件中。作為文件,它們比物理文件更便攜。您可以復制或克隆它們。您可以通過網絡傳輸它們。您可以在不再需要時丟棄或刪除它們。您甚至可以創建一個“黃金映像”作為模板,然后以編程方式(或通過管理員控制臺)從該模板創建數百甚至數千個 VM。
由于這些特性,虛擬機極大地簡化了 IT 管理員的生活。虛擬機使 IT 管理員和員工能夠將服務器和桌面的配置和部署時間從幾小時縮短到幾分鐘,或者在涉及大量(100 或 1,000 個端點)時,從幾周或幾個月縮短到幾天。它們可用于創建測試環境、在主機操作系統上運行遺留應用程序或非本地應用程序、檢查受惡意軟件感染的文件等。
什么是容器?
容器有點類似。與虛擬機一樣,它們采用某種形式的虛擬化。但容器不是虛擬化底層硬件,而是虛擬化主機操作系統,即容器運行的操作系統。容器共享主機操作系統內核,但主機操作系統的其他元素(例如,在用戶模式下運行的系統文件或庫)根據特定容器需要的文件/庫并入每個容器內。
通常,容器包括應用程序、該應用程序所需的操作系統文件以及其他依賴項和相關配置文件。因為大部分操作系統(內核)不包含在容器中,所以容器通常比 VM 小得多。如果虛擬機的大小可以達到千兆字節,那么容器可能只有幾十兆字節。
由于占用空間小,容器的啟動和部署速度比虛擬機快得多——容器的啟動時間不到一秒,而虛擬機的啟動時間只需幾分鐘。而且因為容器共享一個主機操作系統,所以在主機操作系統上進行的任何修補/更新都會被它上面的容器繼承(這僅適用于內核中運行的文件。每個單獨容器中的其他文件必須單獨更新)。
由于它們具有極高的可移植性,并且它們已經包含容器化應用程序獨立運行所需的所有代碼和信息,因此容器在自動化 DevOps 管道中非常有用。實施持續集成/部署 (CI/CD) 的 DevOps 團隊經常使用容器來簡化和加速這些流程。這種可移植性也使容器適用于多云環境。
容器圖像可以上傳到存儲庫以與希望使用它們的其他人共享。這些鏡像可以是數據庫、操作系統、內容管理系統 (CMS)、Web 服務器,以及幾乎所有的容器化應用程序。開發人員、IT 人員和其他人可以使用這些映像來構建他們自己的應用程序。
容器與虛擬機:有什么區別?
一般來說,容器更便于移植,而虛擬機具有更嚴格的隔離。但這并不是兩者之間唯一的區別。以下是關于這兩個特征以及其他一些差異的更多信息:
- 可移植性。容器和基于 VM 的應用程序都具備運行所需的一切。因此,您可以說它們都是便攜式的。但是,由于容器不包含操作系統內核,而只是利用底層主機操作系統提供的資源,因此它們比虛擬機更小,因此更便攜。
- 隔離。虛擬機與其周圍環境更加隔離,無論是主機操作系統還是相鄰的虛擬機。這種隔離級別是在同一物理服務器上托管不同組織的虛擬服務器安全的原因之一。雖然容器也具有高度的隔離性,但它們仍然默認訪問主機操作系統,并且不像 VM 那樣隔離。
- 部署。您需要一個虛擬機管理程序,例如 Microsoft Hyper-V、VMware ESXi 或 Citrix Hypervisor 來部署 VM。另一方面,要部署容器,您需要 Docker 或類似的解決方案(盡管目前使用最廣泛的是 Docker)。您需要使用腳本或 System Center Virtual Machine Manager 等工具進行大規模 VM 部署。對于容器,大規模部署、自動化和編排的實際解決方案是 Kubernetes。
- 持久存儲。虛擬機和容器都可以是無狀態的。在這種情況下,運行時創建的所有文件僅在 VM 或容器的生命周期內保留。但是,即使在 VM 或容器已終止/銷毀后,您也可能希望保留特定文件。對于 VM,您可以通過創建虛擬硬盤 (VHD) 來獲得持久存儲。對于容器,您可以使用卷或綁定掛載。
容器與虛擬機:它們可以一起工作嗎?
雖然單獨使用,但容器和虛擬機在很大程度上可以共存。在某些情況下,如果他們這樣做會更好。以下是一些組合容器和虛擬機有意義的用例。
提高容器可移植性
到目前為止,這篇文章對容器的超便攜性贊不絕口。盡管有這種看法,但容器在該部門確實有一些限制。如果您還記得,容器使用其主機的操作系統內核。因此,您不能在 Linux 主機上運行基于 Windows 的容器,反之亦然。
這也意味著如果你有一堆容器在 Linux 主機上運行,??你就不能在 Windows 主機上傳輸和運行這些容器。您只能在另一臺 Linux 主機上運行它們。容器可移植性如此之多。如果您利用虛擬機,這應該不是問題。
在上面的場景中,你可以在你的 Windows 主機上安裝一個虛擬機管理程序,在它上面設置一個 Linux VM,然后——瞧——你已經有了一個可以運行 Linux 容器的環境。
利用 VM 隔離
在同一主機上運行的所有容器共享該主機的內核,這是一個安全風險。主機操作系統中的錯誤理論上可以允許惡意或受惡意軟件感染的容器到達同一主機上運行的其他容器。此外,如果內核存在漏洞,它可能會影響在其上運行的所有容器。
由于虛擬機具有更強大的隔離性,因此在 VM 上運行的容器可以利用該安全功能。例如,您可以將需要更強安全性的容器組合在一起,并在單獨的 VM 上運行它們(可能使用強化的操作系統)。相比之下,其他安全要求較低的容器在另一個 VM 上運行。
讓基于容器的應用程序與現有的基于虛擬機的應用程序通信
如果您已經在 VM 上運行了應用程序,則可以讓運行在容器上的應用程序與它們通信。例如,您可以讓容器化移動應用程序連接到在 VM 上運行的數據庫,或者讓容器化客戶端應用程序連接到在 VM 上運行的服務器應用程序。